var app = getApp();
//项目URL相同部分，减轻代码量，同时方便项目迁移
//这里因为我是本地调试，所以host不规范，实际上应该是你备案的域名信息
// var $API = require("./apis.js");
var host = 'https://api.chexianghui66.cn'; // 测试地址http://47.104.128.67:8080/
let isRefreshing = false; // 标志是否正在刷新 Token
// var host = 'https://gateway.51gucang.com/'; // 正式地址
/**
 * POST请求，
 * URL：接口
 * postData：参数，json类型
 * doSuccess：成功的回调函数
 * doFail：失败的回调函数
 */

function postDataJson(url, data) {
    // 这里实现您的POST请求逻辑
    return new Promise((resolve, reject) => {
        wx.request({
            url: host + url,
            method: 'POST',
            header: {
                'content-type': 'application/json', //'application/x-www-form-urlencoded;charset=UTF-8',
                'Authorization': wx.getStorageSync('token')
            },
            data: data,
            success(res) {
              if (res.data.code == 200) {
                resolve(res.data); // 解析响应数据并传递给下一个Promise链
              } else if(res.data.code == 401){
                  //重新登录token失效
                  loginFn()
              }else{
                resolve(res.data);
                // setTimeout(() => {
                //   wx.showToast({
                //     title: res.data.msg || '请求失败',
                //     icon: 'error',
                //     duration: 2000,
                //   });
                // }, 100); 
              }
            },
            fail(err) {
                reject(err); // 捕获错误并传递给catch块
            }
        });
    });
};

function getData(url, data) {
    // 这里实现您的POST请求逻辑
    return new Promise((resolve, reject) => {
        wx.request({
            url: host + url,
            method: 'GET',
            header: {
                'content-type': 'application/json',
                'Authorization': wx.getStorageSync('token')
            },
            data: data,
            success(res) {
                if (res.data.code == 200) {
                    resolve(res.data); // 解析响应数据并传递给下一个Promise链
                } else if(res.data.code == 401){
                    //重新登录token失效 或者 游客首次进入
                    loginFn()
                    // isRefreshing = false
                    // login()
                    // reject(new Error('Unauthorized'));
                }else{
                  resolve(res.data);
                //   setTimeout(() => {
                //     wx.showToast({
                //       title: res.data.msg || '请求失败',
                //       icon: 'error',
                //       duration: 2000,
                //     });
                //   }, 100); 
                }
            },
            fail(err) {
                reject(err); // 捕获错误并传递给catch块
            }
        });
    });
};
function loginFn(){
  wx.showModal({
    title: '您还未登录',
    content: '请先登录再进行操作~',
    showCancel: true, // 不显示取消按钮
    confirmText: '去登录',
    cancelText:'暂不登录',
    confirmColor: '#91CFDC',
    success(res) {
      if (res.confirm) {
        wx.navigateTo({
            url: '/pages/login/login'
        })
      }
    }
});
}
function login() {
    // 转中间页
    // wx.navigateTo({
    //   url: '/pages/login/login?tokenFlag=0',
    // })
    if (!isRefreshing) {
      isRefreshing = true;
  
    let that = this
    // 登录
    wx.login({
        success(loginRes) {
            wx.setStorageSync('code', loginRes.code)
            wx.request({
                url: host + `/supermarket/mobile/xcxLogin?code=${loginRes.code}`,
                method: 'POST',
                header: {
                    'content-type': 'application/json',
                },
                success(res) {
                    if (res.data.code == 200) {
                       isRefreshing = false;
                        wx.setStorageSync('token', `Bearer ${res.data.data.token}`)
                        const pages = getCurrentPages(); // 获取页面栈
                        if (pages.length > 0) {
                            const currentPage = pages[pages.length - 1]; // 当前页面实例
                            const currentRoute = currentPage.route; // 当前页面路径
                            // 定义需要处理的路由列表
                            const targetRoutes = ['pages/index/index', 'pages/log/log', 'pages/my/my'];
                            if (targetRoutes.includes(currentRoute)) {
                              // 根据当前路由决定跳转的目标页面
                              const targetUrl = currentRoute === 'pages/my/my' ? '/pages/index/index' : '/pages/my/my';
                              wx.switchTab({
                                url: targetUrl, 
                              });
                            }else{
                                wx.switchTab({
                                    url: 'pages/index/index', 
                                });
                            }
                        }
                    } else if (res.data.code == 402) {
                        wx.showModal({
                            title: '提示',
                            content: '您还未登录，无法使用平台相关功能，请先前往登录~',
                            showCancel: true, // 不显示取消按钮
                            cancelText:'暂不登录',
                            confirmText: '去登录',
                            confirmColor: '#91CFDC',
                            success(res) {
                              if (res.confirm) {
                                wx.navigateTo({
                                    url: '/pages/login/login',
                                })
                              }else if (res.cancel) {
                                // 用户点击了取消按钮
                                // wx.switchTab({
                                //     url: '/pages/index/index', 
                                // });
                                // 在这里可以添加其他逻辑，比如提示用户或关闭弹窗等
                            }
                            }
                        });
                    }
                },
                fail(err) {
                    isRefreshing = false;
                    reject(err); // 捕获错误并传递给catch块
                }
            });
        },
        fail(err) {
            console.error("登录失败", err);
        }
    });
  }
};

function uploadImg(url, params) {
    return new Promise((resolve, reject) => {
        //这里是上传操作
        wx.uploadFile({
            url: host + url, //里面填写你的上传图片服务器API接口的路径 
            filePath: params.filePath, //要上传文件资源的路径 String类型 
            name: 'file', //按个人情况修改，文件对应的 key,开发者在服务器端通过这个 key 可以获取到文件二进制内容，(后台接口规定的关于图片的请求参数名称)
            header: {
                "Content-Type": "multipart/form-data;charset=UTF-8", //记得设置
                'Authorization': wx.getStorageSync('token') //和服务器约定的token, 一般也可以放在header中
            },
            // formData: {
            //     userId: wx.getStorageSync('GLOBAL_USERID'),
            //     from: params.fromText
            // },
            success: function (resp) {
                resolve(resp.data)
            },
            fail: function () {
                console.log('失败')
            },
        })
    })
};

function getBuffer(url, data) {
    // 这里实现您的POST请求逻辑
    return new Promise((resolve, reject) => {
        wx.request({
            url: host + url,
            method: 'GET',
            responseType: 'arraybuffer', // 设置响应类型为arraybuffer
            data: {
                content: '1234567890' // 二维码内容 
            },
            header: {
                'content-type': 'application/json',
                'Authorization': wx.getStorageSync('token')
            },
            data: data,
            success(res) {

                // const fsm = wx.getFileSystemManager();
                // const filePath = `${wx.env.USER_DATA_PATH}/temp_qrcode.png`; // 定义一个临时文件路径
                // fsm.writeFile({
                //     filePath: filePath,
                //     data: Array.from(new Uint8Array(res)), // 将arraybuffer转换为数组
                //     encoding: 'binary',
                //     success: () => {
                //         resolve(filePath)
                //     },
                //     fail: console.error
                // });
                resolve(res)
            },
            fail(err) {
                reject(err); // 捕获错误并传递给catch块
            }
        });
    });
};
module.exports = {
    postDataJson: postDataJson,
    getData: getData,
    uploadImg,
    getBuffer
};
// function postData(url, postData, doSuccess, doFail) {

//     wx.request({
//         //项目的真正接口，通过字符串拼接方式实现
//         url: host + url,
//         header: {
//             'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
//             'Authorization': wx.getStorageSync('HEADER_AUTHORIZATION')
//         },
//         data: postData,
//         method: 'POST',
//         success: function (res) {
//             //参数值为res.data,直接将返回的数据传入
//             if (res.data.code == 200) {
//                 doSuccess(res.data);
//             } else if (res.data.code == 10018003) {
//                 wx.clearStorageSync();
//                 wx.showToast({
//                     title: res.data.message,
//                     icon: 'none',
//                     duration: 2000
//                 })
//                 setTimeout(() => {
//                     wx.reLaunch({
//                         url: '../login/login'
//                     })
//                 }, 2000)
//             } else if (res.data.code == 10018001) {
//                 wx.clearStorageSync();
//                 wx.showToast({
//                     title: res.data.message,
//                     icon: 'none',
//                     duration: 2000
//                 })
//                 setTimeout(() => {
//                     wx.reLaunch({
//                         url: '../login/login'
//                     })
//                 }, 2000)
//             } else {
//                 wx.showToast({
//                     title: res.data.message || '网络超时，请稍后',
//                     icon: 'none',
//                     duration: 2000
//                 })
//             }
//         },
//         fail: function () {
//             doFail();
//         },
//     })
// }
// function postDataJson(url, postData, doSuccess, doFail) {
//     wx.request({
//         //项目的真正接口，通过字符串拼接方式实现
//         url: host + url,
//         header: {
//             'content-type': 'application/json;charset=UTF-8',
//             'Authorization': wx.getStorageSync('HEADER_AUTHORIZATION')
//         },
//         data: postData,
//         method: 'POST',
//         success: function (res) {
//             //参数值为res.data,直接将返回的数据传入
//             if (res.data.code == 200) {
//                 doSuccess(res.data);
//             } else if (res.data.code == 10018003) {
//                 wx.clearStorageSync();
//                 wx.showToast({
//                     title: res.data.message,
//                     icon: 'none',
//                     duration: 2000
//                 })
//                 setTimeout(() => {
//                     wx.reLaunch({
//                         url: '../pages/login/login',
//                     })
//                 }, 2000)
//             } else if (res.data.code == 10023016) {

//                 wx.showToast({
//                     title: res.data.message,
//                 })
//                 setTimeout(() => {
//                     wx.switchTab({
//                         url: '../index/index',
//                     })
//                 }, 1000);
//                 doSuccess(res.data);
//             } else if (res.data.code == 10018001) {
//                 wx.clearStorageSync();
//                 wx.showToast({
//                     title: res.data.message,
//                     icon: 'none',
//                     duration: 2000
//                 })
//                 setTimeout(() => {
//                     wx.reLaunch({
//                         url: '../login/login'
//                     })
//                 }, 2000)
//             } else {
//                 wx.showToast({
//                     title: res.data.message || '网络超时，请稍后',
//                     icon: 'none',
//                     duration: 2000
//                 })
//             }
//         },
//         fail: function () {
//             doFail();
//         },
//     })
// }


//GET请求
// function getData(url, getData, doSuccess, doFail) {
//     wx.request({
//         url: host + url,
//         header: {
//             'content-type': 'application/json;charset=UTF-8',
//             'Authorization': wx.getStorageSync('HEADER_AUTHORIZATION')
//         },
//         data: getData,
//         method: 'GET',
//         success: function (res) {
//             if (res.data.code == 200) {
//                 doSuccess(res.data);
//             } else if (res.data.code == 10018003) {
//                 wx.clearStorageSync();
//                 wx.showToast({
//                     title: res.data.message,
//                     icon: 'none',
//                     duration: 2000
//                 })
//                 setTimeout(() => {
//                     wx.reLaunch({
//                         url: '../login/login'
//                     })
//                 }, 2000)
//             } else if (res.data.code == 10018001) {
//                 wx.clearStorageSync();
//                 wx.showToast({
//                     title: res.data.message,
//                     icon: 'none',
//                     duration: 2000
//                 })
//                 setTimeout(() => {
//                     wx.reLaunch({
//                         url: '../login/login'
//                     })
//                 }, 2000)
//             } else {
//                 wx.showToast({
//                     title: res.data.message || '网络超时，请稍后',
//                     icon: 'none',
//                     duration: 2000
//                 })
//             }
//         },
//         fail: function () {
//             doFail();
//         },
//     })
// }
/**
 * 上传图片
 */
// function uploadImg(params, doSuccess, doFail) {
//     //这里是上传操作
//     wx.uploadFile({
//         url: host + $API.api.commonApi.uploadImg, //里面填写你的上传图片服务器API接口的路径 
//         filePath: params.filePath, //要上传文件资源的路径 String类型 
//         name: 'file', //按个人情况修改，文件对应的 key,开发者在服务器端通过这个 key 可以获取到文件二进制内容，(后台接口规定的关于图片的请求参数名称)
//         header: {
//             "Content-Type": "multipart/form-data;charset=UTF-8", //记得设置
//             'Authorization': wx.getStorageSync('token') //和服务器约定的token, 一般也可以放在header中
//         },
//         formData: {
//             userId: wx.getStorageSync('GLOBAL_USERID'),
//             from: params.fromText
//         },
//         success: function (resp) {
//             if (resp.statusCode == 200) {
//                 doSuccess(resp.data);
//             } else {
//                 wx.showToast({
//                     title: res.data.message || '网络超时，请稍后',
//                     icon: 'none',
//                     duration: 2000
//                 })
//             }
//         },
//         fail: function () {
//             doFail();
//         },
//     })
// }
/**
 * module.exports用来导出代码
 * js文件中通过var call = require('../util/request.js')  加载
 * 在引入引入文件的时候'  '里面的内容通过../../../这种类型，小程序的编译器会自动提示，因为你可能
 * 项目目录不止一级，不同的js文件对应的工具类的位置不一样
 */
// module.exports.postData = postData;
// module.exports.getData = getData;
// module.exports.postDataJson = postDataJson;
// module.exports.host = host;
// module.exports.uploadImg = uploadImg;